package com.daji.concurrency.multithread_fundamental;

public class A01_HowToCreateThread {
    public static void main(String[] args) {
        //1、第一种方式：继承Thread类
        Thread t0 = new MyThread0();
        t0.start(); // 启动新线程

        //2、第二种方式：实现Runnable方法
        Thread t1 = new Thread(new MyRunnable());
        t1.start(); // 启动新线程

        //3、第三种方式：实现Runnable方法（同第二种方式。只不过是lambda简化了）
        Thread t2 = new Thread(() -> {
            System.out.println("start new thread!");
        });
        t2.start(); // 启动新线程

        //4、第三种方式可以传一个函数进去。效果同上面的方式是一样的
        Thread t3 = new Thread(() -> func());
        t3.start();

        //5、加餐。不属于多线程。Java的双冒号语法
        /*
            加餐：Java :: 双冒号表达式
            官方名字叫方法引用。
            该功能特性也是JDK8以后引入的，你可以把它看做lambda表达式的语法糖。
            上面的 new Thread(() -> func()); 可以被双冒号简化成下面的代码
        */
        Thread t4 = new Thread(A01_HowToCreateThread::func);
        t4.start();

    }

    private static void func(){
        System.out.println("start new thread by func");
    }
}

class MyThread0 extends Thread {
    @Override
    public void run() {
        System.out.println("start new thread!");
    }
}
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("start new thread!");
    }
}

